{
 "cells": [
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-26T12:46:42.044220Z",
     "start_time": "2025-02-26T12:46:42.039209Z"
    }
   },
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=12, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.10.0\n",
      "numpy 2.0.2\n",
      "pandas 2.2.3\n",
      "sklearn 1.6.1\n",
      "torch 2.6.0+cu126\n",
      "cuda:0\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dataset\n",
    "\n",
    "实际上我们从chapter_2 开始就在使用该模块"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-26T12:46:42.062725Z",
     "start_time": "2025-02-26T12:46:42.045212Z"
    }
   },
   "source": [
    "from torch.utils.data import Dataset\n",
    "\n",
    "class RandomDataset(Dataset):\n",
    "    def __init__(self, labels):\n",
    "        self.labels = labels\n",
    "        \n",
    "    def __getitem__(self, index):\n",
    "        data = torch.mul(torch.randn(2), 0.1) + self.labels[index] # 生成两个服从标准正态分布的随机数（两个维度），然后乘以0.1，再加上label\n",
    "        label = self.labels[index]\n",
    "        return data, label # 返回的是一个元组,这里返回的数据格式决定我们遍历这个数据集时，每次迭代返回的数据格式\n",
    "    \n",
    "    def __len__(self):\n",
    "        return len(self.labels)\n",
    "    \n",
    "#np.random.randint(2, size=1000)生成了一个长度为1000的随机标签数组，每个元素都是0或1\n",
    "rd = RandomDataset(np.random.randint(2, size=1000))\n",
    "print(\"数据集的长度：\", len(rd))\n",
    "\n",
    "for x,y in rd:\n",
    "    print(x,y)\n",
    "    break"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据集的长度： 1000\n",
      "tensor([0.8577, 0.9243]) 1\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-26T12:46:42.222546Z",
     "start_time": "2025-02-26T12:46:42.063722Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 可视化随机数据集\n",
    "x1 = []\n",
    "x2 = []\n",
    "labels = [] #标签\n",
    "\n",
    "for (a,b), label in rd:\n",
    "    x1.append(a)\n",
    "    x2.append(b)\n",
    "    labels.append(label)\n",
    "\n",
    "    \n",
    "plt.scatter(x1, x2, s=10, c=labels) # s是点的大小，c是颜色\n",
    "plt.colorbar()\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 4
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-19T08:11:18.763467Z",
     "start_time": "2024-07-19T08:11:18.753493Z"
    }
   },
   "source": [
    "## DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-26T12:46:42.228437Z",
     "start_time": "2025-02-26T12:46:42.223541Z"
    }
   },
   "source": [
    "from torch.utils.data import DataLoader\n",
    "\n",
    "ld = DataLoader(rd, batch_size=8, shuffle=True) # batch_size是每次迭代返回的数据个数，shuffle是是否打乱数据集\n",
    "\n",
    "for data, label in ld:\n",
    "    print(data)\n",
    "    print(label)\n",
    "    break"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[0.1081, 0.0776],\n",
      "        [0.1848, 0.2236],\n",
      "        [1.1361, 1.0428],\n",
      "        [1.0290, 1.0693],\n",
      "        [0.0529, 0.1276],\n",
      "        [0.9667, 0.9204],\n",
      "        [1.0920, 0.9957],\n",
      "        [0.9499, 0.7731]])\n",
      "tensor([0, 0, 1, 1, 0, 1, 1, 1], dtype=torch.int32)\n"
     ]
    }
   ],
   "execution_count": 5
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## tfrecord\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-19T08:13:01.285506800Z",
     "start_time": "2024-07-19T08:13:01.277636200Z"
    }
   },
   "source": [
    "复现论文的时候更多地发现使用 pyarrow 而不是 tfrecord\n",
    "\n",
    "如果想在pytorch里使用tfrecord，可以参考 https://github.com/vahidk/tfrecord"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
